Articles of c + +

MSVC上的双字节编码(std :: codecvt):引导字节无法识别

我想在Microsoft标准库实现(MSVC11)中使用std::codecvt<wchar_t, char, std::mbstate_t>::in()将双字节代码页中编码的string转换为UTF-16string。 例如,考虑以下程序: #include <iostream> #include <locale> int main() { // KATAKANA LETTER A (U+30A2) in Shift-JIS (Codepage 932) // http://msdn.microsoft.com/en-us/goglobal/cc305152 char const cs[] = "\x83\x41"; std::locale loc = std::locale("Japanese"); // Output: "Japanese_Japan.932" (as expected) std::cout << loc.name() << '\n'; typedef std::codecvt<wchar_t, char, std::mbstate_t> cvt_t; cvt_t const& codecvt = std::use_facet<cvt_t>(loc); wchar_t out = 0; […]

如何防止控制改变Z命令?

我有.Net中的用户控件,我在WndProc中使用命中testing来允许在运行时用鼠标调整它的大小。 问题是,在命中testing成功后(鼠标按下,拖动resize,鼠标释放),控件以Z顺序向上跳,并将其废弃在窗体中。 我需要命中testing,因为它是一个非常自定义的控件。 WndProc有没有办法阻止控件改变它的Z顺序? 谢谢。 命中testing代码: protected override void WndProc(ref Message m) { if (!DesignMode && Sizeable && (m.Msg == Win32Wrapper.WM_NCHITTEST)) { Point Hit = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16); Hit = this.PointToClient(Hit); int DistToBorder = 5; if (Hit.X < DistToBorder) { if (Hit.Y < DistToBorder) { m.Result = (IntPtr)Win32Wrapper.HTTOPLEFT; return; } if […]

如何正确读取subprocess的stdout / stderr输出?

我写了一个程序a.exe ,它使用CreateProcess函数启动另一个我写的程序b.exe 。 调用者创build两个pipe道,并将两个pipe道的写入端传递给CreateProcess,作为stdout / stderr句柄用于subprocess。 这与在MSDN上创build具有redirectinput和输出样本的subprocess几乎相同。 由于它似乎不能使用一个等待进程退出的同步调用或 stdout或stderr上的数据可用( WaitForMultipleObjects函数在pipe道上不起作用),调用者有两个线程正在运行都在stdout / stderrpipe道的读取端执行(阻塞) ReadFile调用; 这里是用于stdout / stderr的“读取线程过程”的确切代码(我没有自己写这个代码,我假设有一些同事呢): DWORD __stdcall ReadDataProc( void *handle ) { char buf[ 1024 ]; DWORD nread; while ( ReadFile( (HANDLE)handle, buf, sizeof( buf ), &nread, NULL ) && GetLastError() != ERROR_BROKEN_PIPE ) { if ( nread > 0 ) { fwrite( buf, […]

如何获得本地组中的所有用户(性能良好)

我正在寻找一个解决scheme,但我发现所有解决scheme都很慢。 我想让本地窗口组中的所有用户。 这个小组当然也可以包含AD组。 因此,结果应该包含属于该组本身的所有用户以及包含的AD组的用户。 你知道这个有很好的性能的解决scheme吗?

如何以编程方式更改默认的audioinput设备

我正在寻找一种方法来设置/更改我的应用程序内的默认input设备。 我有几个不同的录音设备,进入控制面板并更改默认录音设备非常烦人。 我环顾四周,我没有find任何可以帮助我解决问题的方法。 应用程序是用C#编写的,它是针对Windows Vista / Windows 7的。

检查用户是否不活动

如何检查用户是否处于非活动状态? 我有这个: class UserActivity : IMessageFilter { private double afk_time = 0.1;//minutes private DateTime last_activity = DateTime.Now; public static bool inactive = false; private int WM_LBUTTONDOWN = 0x0201; private int WM_MBUTTONDOWN = 0x0207; private int WM_RBUTTONDOWN = 0x0204; private int WM_MOUSEWHEEL = 0x020A; private int WM_MOUSEMOVE = 0x0200; private int WM_KEYDOWN = 0x0100; public bool […]

使用C#获取连接到命名pipe道服务器的客户端的进程ID

我不确定我是否没有看到它,或者是什么? 我需要知道从NamedPipeServerStream实例通过命名pipe道连接到我的服务器的客户端的进程ID。 这样可能吗? 同时我想出了这个function: [DllImport("kernel32.dll", SetLastError = true)] internal static extern bool GetNamedPipeClientProcessId(IntPtr Pipe, out UInt32 ClientProcessId); public static UInt32 getNamedPipeClientProcID(NamedPipeServerStream pipeServer) { //RETURN: // = Client process ID that connected via the named pipe to this server, or // = 0 if error UInt32 nProcID = 0; try { IntPtr hPipe = pipeServer.SafePipeHandle.DangerousGetHandle(); GetNamedPipeClientProcessId(hPipe, […]

c不能正确打印“┌──┐”字符

下午好,我在c代码上面临一个问题,我不知道是什么原因造成的。 每当我尝试打印这样的字符:“┌──┐”我的程序只是打印一些奇怪的字符,就像这个截图: 我在Windows上使用Qt Creator,Qt版本为5.5.0,MSVC为64位。 编译器是Microsoft Visual C ++编译器12.0(amd64)。 我试图改变语言环境,但没有成功。 我发现打印这些字符的唯一方法是用ASCII代码将它们定义为intvariables并将它们打印出来,但这导致了一些非常广泛和难看的编码,如下所示: int cSupEsq = 218; //'┌' int cSupDir = 191; //'┐' int cInfEsq = 192; //'└' int cInfDir = 217; //'┘' int mVert = 179; //'│' int mHor = 196; //'─' int espaco = 255; //' ' int letraO = 111; //'o' //Inicia limpando a tela […]

获取有关分区的信息

我从msdn中得到一个c ++代码的例子,我尝试获取有关分区的信息,但是在这段代码中,我的DeviceIoControl方法返回0,结束了错误代码3.我该如何解决这个错误? 代码在这里: #define WINVER 0x0500 #include <windows.h> #include <winioctl.h> #include <iostream> #include <stdio.h> void DisplayVolumeInfo(CHAR *volume) { HANDLE hDevice = CreateFileA( volume, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL); if (hDevice != INVALID_HANDLE_VALUE) { PARTITION_INFORMATION partInfo; DWORD retcount = 0; BOOL res = DeviceIoControl( hDevice, IOCTL_DISK_GET_PARTITION_INFO, (LPVOID)NULL, (DWORD)0, (LPVOID)&partInfo, sizeof(partInfo), &retcount, […]

子对话框 – SetWindowTextA或SendMessageA崩溃程序 – MFC

错误:afxwin2.inl行165 我的应用程序是一个有几个编辑框的对话框。 一旦我点击button来评估input的信息,我想打开一个子对话框来显示结果。 我试图像这样重载DoModal(): //in the child dialog //.h CResultsDlg::CResultsDlg(CParentDlg *parent); virtual INT_PTR DoModal(float bmi); //.cpp CResultsDlg::CResultsDlg(CParentDlg *parent) : CDialogEx(CResultsDlg::IDD), _parent(parent) { //initializations } INT_PTR CResultsDlg::DoModal(float bmi) { m_sBMI.Format("%f", bmi); m_hBMI.SetWindowTextA(m_sBMI); //crashes !!!!!!!!!! m_hBMI.SendMessageA(WM_SETTEXT, 0, (LPARAM)"15.11"); //crashes !!!!!!!! // OnInitDialog(); //because this wasn't getting called at all return CDialogEx::DoModal(); } BOOL CResultsDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // […]