GetLastError的返回值是1309,请教各位大侠应怎样改正,在线等……

yangli_ghost 2011-01-18 03:44:19
...全文
271 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hai040 的回复:]
控制台的输入好像都是阻塞式的
[/Quote]
阻塞式大多数是用于通信的吧,我这里没有用到通信呀
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
如果用循环能实现的话,那么上面的代码要是没错的话应该可以,但是它还是只能监视第一个
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hai040 的回复:]
那个循环可以试试timer
[/Quote]

#include "afxwin.h"
#include "iostream.h"
#include "Shlwapi.h"
#include "process.h"

#define HWND_NULL 0x0001
#define STRNAME_NULL 0x1001
#define NAME_NULL 0x1002


char *__g_pszWindowsName;

struct MYWINDOWSNAME
{
int n;
char Name[MAX_PATH];
};

typedef MYWINDOWSNAME *LPMYWINDOWSNAME;

struct WINDOWSNAME
{
int number;
char WindowsName[MAX_PATH];
};

typedef WINDOWSNAME *LPWINDOWSNAME;

BOOL CALLBACK EnumWindowsProc( HWND hWnd,LPARAM lParam )
{
if ( GetParent(hWnd) == NULL && IsWindowVisible(hWnd) ) //判断是否顶层窗口并且可见
{
char WindowTitle[100] = {0};
GetWindowText( hWnd,WindowTitle, 100 );
if ( StrStrI( WindowTitle, __g_pszWindowsName ) || stricmp( WindowTitle, __g_pszWindowsName ) == 0 )
{
DWORD dwPID = 0;
//MessageBox( NULL, "IS NULL!", NULL, MB_OK );
hWnd = FindWindow( NULL, WindowTitle );
if ( hWnd != NULL )
{
PostMessage( hWnd, WM_QUIT, 0, 0 );
}
else
{
DWORD dwError = GetLastError();
printf("%d\n", dwError);
}
}

}
if ( GetParent(hWnd) != NULL && IsWindowVisible(hWnd) )
{
char WindowTitle[100] = {0};
GetWindowText( hWnd,WindowTitle, 100 );
if ( StrStrI( WindowTitle, __g_pszWindowsName ) || stricmp( WindowTitle, __g_pszWindowsName ) == 0 )
{
DWORD dwPID = 0;
//MessageBox( NULL, "NOT NULL!", NULL, MB_OK );
hWnd = FindWindow( NULL, WindowTitle );
if ( hWnd != NULL )
{
PostMessage( hWnd, WM_CLOSE, 0, 0 );
}
else
{
DWORD dwError = GetLastError();
printf("%d\n", dwError);
}
}
}

return true;

}

// DWORD CloseWindowsByName( LPMYWINDOWSNAME lpMyWindowsName, char *pszWindowsName )
// {
// DWORD dwRet = 0;
// if ( lpMyWindowsName != NULL)
// {
// for ( int i = 0; i < lpMyWindowsName->n; i++ )
// {
// cout<<lpMyWindowsName[i].Name<<" ";
// }
// cout<<endl;
// }
// do
// {
// if ( pszWindowsName == NULL )
// {
// dwRet = NAME_NULL;
// break;
// }
// else
// {
// for ( int temp = 0; temp < lpMyWindowsName->n; temp++ )
// {
// if ( stricmp(lpMyWindowsName[temp].Name, pszWindowsName)== 0 )
// {
// while(1)
// {
// __g_pszWindowsName = pszWindowsName;
// EnumWindows( EnumWindowsProc, NULL );
// // cout<<GetLastError()<<endl;
// Sleep(3000);
// }
// }
// }
// }
// } while (0);
//
// return dwRet;
// }
DWORD CloseWindowsByName( LPMYWINDOWSNAME lpMyWindowsName, LPWINDOWSNAME lpWindowsName )
{
DWORD dwRet = 0;
if ( lpMyWindowsName != NULL)
{
for ( int i = 0; i < lpMyWindowsName->n; i++ )
{
cout<<lpMyWindowsName[i].Name<<" ";
}
cout<<endl;
}
do
{
if ( lpWindowsName == NULL )
{
dwRet = NAME_NULL;
break;
}
else
{
for ( int temp = 0; temp < lpMyWindowsName->n; temp++ )
{
for ( int num = 0; num < lpWindowsName->number; num++ )
{
if ( stricmp(lpMyWindowsName[temp].Name, lpWindowsName[num].WindowsName)== 0 )
{
while(1)
{
__g_pszWindowsName = lpWindowsName[num].WindowsName;
EnumWindows( EnumWindowsProc, NULL );
// cout<<GetLastError()<<endl;
Sleep(3000);
}
}
}

}
}
} while (0);

return dwRet;
}

void main()
{
LPMYWINDOWSNAME lpMyWindowsName = (LPMYWINDOWSNAME)malloc(1024);
LPWINDOWSNAME lpWindowsName = (LPWINDOWSNAME)malloc(1024);
cout<<"Please Input the WindowsName:"<<endl;
for ( int i = 0; i < 3; i++ )
{
cin.getline( lpMyWindowsName[i].Name, strlen(lpMyWindowsName[i].Name) );
lpMyWindowsName->n = i+1;
}
cout<<"Please Input another WindowsName:"<<endl;
for ( int j = 0; j < 5; j++ )
{
cin.getline( lpWindowsName[j].WindowsName, strlen(lpWindowsName[j].WindowsName) );
lpWindowsName->number = j+1;
}
// CloseWindowsByName( lpMyWindowsName, "世界之窗" );
CloseWindowsByName( lpMyWindowsName, lpWindowsName );
}
hai040 2011-01-18
  • 打赏
  • 举报
回复
控制台的输入好像都是阻塞式的
hai040 2011-01-18
  • 打赏
  • 举报
回复
那个循环可以试试timer
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hai040 的回复:]
窗口的话在修改的响应函数里改值就行吧
控制台的话只能自己写多线程
[/Quote]
控制台的话就只能用多线程来实现了吗?
hai040 2011-01-18
  • 打赏
  • 举报
回复
窗口的话在修改的响应函数里改值就行吧
控制台的话只能自己写多线程
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
要是用一个结构体数组来保存传入的值,然后和窗口名或标题比较,这样能不能实现呢
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hai040 的回复:]
多项?
是关多种窗口?
调多次enumwindows
[/Quote]
不是,程序在监视一个窗口的同时,可以继续传入新值给pszWindowsName,然后程序有监视含有pszWindowsName的窗口,并且不能对之前窗口的监视
hai040 2011-01-18
  • 打赏
  • 举报
回复
多项?
是关多种窗口?
调多次enumwindows
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hai040 的回复:]
EnumWindowsProc的定义?
[/Quote]
现在我的程序只是支持单项,现在要做成支持多项的
不用线程的话应该怎么做呢?
在程序一直监视含有pszWindowsName的窗口,并关闭它;(这是现在的功能)
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
问题已经解决了,关键的原因就在EnumWindowsProc中,将返回值修改了
hai040 2011-01-18
  • 打赏
  • 举报
回复
EnumWindowsProc的定义?
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
大侠们,帮帮忙呀,分不够还可以加的
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bluesky12312388 的回复:]
网络是否连接好,是否有相关操作权限。
[/Quote]
这和网络没有关系,如果stricmp(lpMyWindowsName[temp].Name, pszWindowsName)== 0
就列举当前打开窗口,并关闭喊pszWindowsName的窗口
bluesky12312388 2011-01-18
  • 打赏
  • 举报
回复
网络是否连接好,是否有相关操作权限。
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复

DWORD CloseWindowsByName( LPMYWINDOWSNAME lpMyWindowsName, char *pszWindowsName )
{
DWORD dwRet = 0;
if ( lpMyWindowsName != NULL)
{
for ( int i = 0; i < lpMyWindowsName->n; i++ )
{
cout<<lpMyWindowsName[i].Name<<" ";
}
cout<<endl;
}
do
{
if ( pszWindowsName == NULL )
{
dwRet = NAME_NULL;
break;
}
else
{
for ( int temp = 0; temp < lpMyWindowsName->n; temp++ )
{
if ( stricmp(lpMyWindowsName[temp].Name, pszWindowsName)== 0 )
{
while(1)
{
__g_pszWindowsName = pszWindowsName;
EnumWindows( EnumWindowsProc, NULL );
cout<<GetLastError()<<endl;
Sleep(3000);
}
}
}
}
} while (0);

return dwRet;
}
yangli_ghost 2011-01-18
  • 打赏
  • 举报
回复
那个是GetLastError返回值意义的截图,在下面我已将1309所指的错误信息贴出来了
失落的凡凡 2011-01-18
  • 打赏
  • 举报
回复
楼主大概把CSDN的人都当成神了。大家不看你的工程,就知道你哪个文件的第几行的某个函数调用的第几个参数传错了。
bluesky12312388 2011-01-18
  • 打赏
  • 举报
回复
你的图挂了
加载更多回复(1)

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧