小编Ofe*_*fer的帖子

使用ShellExecute打开一个没有".exe"扩展名的可执行文件

我想用ShellExecute打开一个没有".exe"扩展名的可执行文件.我可以使用CreateProcess但我更喜欢使用ShellExecute.有办法吗?

我使用带有win32api函数的C++.

谢谢.

c++ windows winapi

3
推荐指数
1
解决办法
2192
查看次数

FindFirstChangeNotification两次通知有关更改

我想监视文件系统中的文件夹.假设我要监视文件夹:C:\ MyNewFolder

我有这个代码来做到这一点:

HANDLE  ChangeHandle=FindFirstChangeNotification(_T("C:\\\MyNewFolder"),FALSE,FILE_NOTIFY_CHANGE_LAST_WRITE);
for(;;)
{
    DWORD Wait=WaitForSingleObject(ChangeHandle,INFINITE);
    if (Wait == WAIT_OBJECT_0)
    {
        MessageBox(NULL,_T("Change"),_T("Change"),MB_OK);
        FindNextChangeNotification(ChangeHandle);
    }
    else
    {
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个消息框,通知我文件夹中的任何文件更改.该代码工作正常,但我有一个问题.问题是我每次更改都收到2次通知.我的代码有什么问题?谢谢.

c++ windows winapi

3
推荐指数
1
解决办法
5521
查看次数

连接多个缓冲区的有效方法

我需要设计一个有效可读的类,它有两个主要功能:

  • add_buffer(char* buffer) - 添加缓冲区.
  • char* read_all() - 获取一个大缓冲区,其中包含用户直到现在添加的所有缓冲区(按顺序).

例如:

char first_buffer[] = {1,2,3};
char second_buffer[] = {4,5,6};

MyClass instance;
instance.add_buffer(first_buffer);
instance.add_buffer(second_buffer);
char* big_buffer = instance.read_all(); // big_buffer = [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

注意:这个问题有很多解决方案,但我正在寻找一个有效的解决方案,因为在现实生活中缓冲区会很多很多,我想节省大量的复制和reallocs(比如什么std :: vector)一样).我也想要一个可读的c ++代码.

注意:现实生活中的问题是:我正在从分离的块中找到的HTTP请求中读取数据.在所有块到达后,我想将整个数据返回给用户.

c++

3
推荐指数
1
解决办法
898
查看次数

SS_NOTIFY和WM_SETCURSOR

我正在尝试使用C++模仿对话框上的超链接.

我正在使用设置了SS_NOTIFY的静态控件,以便用户可以单击该控件并转到网页:

 LTEXT           "Caption2",IDC_SETTINGS,9,36,219,13,SS_NOTIFY
Run Code Online (Sandbox Code Playgroud)

使用SS_NOTIFY设置,我可以拦截点击,因为它是针对静态注册的:

case IDC_STC_URL:
ShellExecute(NULL, "open", "http://google.co.uk", NULL, NULL, SW_SHOWNORMAL);
return TRUE;
Run Code Online (Sandbox Code Playgroud)

我也通过拦截WM_SETCURSOR消息将光标更改为手:

case WM_SETCURSOR:
POINT pt;
RECT rect;

GetCursorPos( &pt );
GetWindowRect( GetDlgItem(hwnd,IDC_SETTINGS), &rect );

if (PtInRect(&rect, pt))
{
    SetCursor(LoadCursor(NULL, IDC_HAND));
}
else
{
    SetCursor(LoadCursor(NULL, IDC_ARROW));
}
return TRUE;
Run Code Online (Sandbox Code Playgroud)

但是,当设置SS_NOTIFY时,光标更改不起作用.当SS_NOTIFY被取消时,它会.但是然后没有针对静态注册click,因此ShellExecute()无法打开URL.

有没有人建议我做错了什么?

谢谢你.

c++ windows winapi

1
推荐指数
1
解决办法
1503
查看次数

GetTokenInformation返回ERROR_INSUFFICIENT_BUFFER

下面的代码返回ERROR_INSUFFICIENT_BUFFER错误:

DWORD dwReturnedDataSize;
if (!GetTokenInformation(hToken,TokenPrivileges,NULL,0,&dwReturnedDataSize))
{
    CloseHandle(hToken);
    return false; 
}
Run Code Online (Sandbox Code Playgroud)

我不知道为什么。

c++ windows winapi

0
推荐指数
1
解决办法
613
查看次数

标签 统计

c++ ×5

winapi ×4

windows ×4