能力值:
( LV2,RANK:10 )
|
-
-
2 楼
LRESULT CALLBACK mainDlgProc(HWND hDlg, UINT uMsg,WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
InitCommonControls(); //通用控件初始化
SetWindowText(hDlg,"日志读取程序");
hlist=GetDlgItem(hDlg,IDC_LIST1);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
listevent();
return TRUE;
}
break;
case WM_CLOSE:
EndDialog(hDlg,TRUE);
break;
}
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢:
这个问题解决了,可是新的问题出现了,当我点完OK按钮后,程序直接退出了,我OK按钮的代码
基本上都是仿MSDN做的
#include <windows.h>
#include <stdio.h>
#include <commctrl.h>
#include <tlhelp32.h>
#include "resource.h"
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"WinMainCRTStartup\"")
#pragma comment(linker,"/out:mytest.exe")
#pragma comment(lib,"User32.lib")
#pragma comment(lib,"advapi32.lib")
#pragma comment(lib,"comctl32.lib")
LPCTSTR dllName="C:\\WINDOWS\\SYSTEM32\\msi.dll";
HINSTANCE hInstance;
HWND hlist;
void listevent()
{
HANDLE hdle;
EVENTLOGRECORD *ptr;
BYTE buff[1024*64];
DWORD read_len, next_len;
ptr=(EVENTLOGRECORD *)&buff;
hdle=OpenEventLog(NULL, "System");
if (hdle==NULL)
{
MessageBox(0,"打开日志失败",NULL,0);
}
else
{
long mRet;
LPCTSTR lpSourceName;
char lpszSourceName[255]={0};
char lpszComputerName[255]={0};
unsigned uStepOfString;
char* pStrings;
char szExpandedString[1024]={0};
int x;
DWORD dwThisRecord;
char buffer[65];
HANDLE ghResDll;
char lpMsgBuf1[4096];
ghResDll = LoadLibrary(dllName);
GetOldestEventLogRecord(hdle, &dwThisRecord);
while(ReadEventLog(hdle,EVENTLOG_FORWARDS_READ|EVENTLOG_SEQUENTIAL_READ,
0,ptr,sizeof(buff),&read_len,&next_len))
{
while(read_len>0)
{
lpSourceName = (LPCTSTR) ((LPBYTE) ptr + sizeof(EVENTLOGRECORD));
FormatMessage(
FORMAT_MESSAGE_FROM_HMODULE,
ghResDll,ptr->EventID,
MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),(LPTSTR) &lpMsgBuf1,4096,NULL);
SendMessage(hlist,LB_ADDSTRING,0,(LPARAM)"S");
read_len -= ptr->Length;
ptr = (EVENTLOGRECORD *) ((LPBYTE) ptr + ptr->Length);
}
}
CloseEventLog(hdle);
}
}
LRESULT CALLBACK mainDlgProc(HWND hDlg, UINT uMsg,WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
InitCommonControls(); //通用控件初始化
SetWindowText(hDlg,"日志读取程序");
hlist=GetDlgItem(hDlg,IDC_LIST1);
return TRUE;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
{
listevent();
return TRUE;
}
}
break;
case WM_CLOSE:
EndDialog(hDlg,TRUE);
break;
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR pCmdLine, int nCmdShow)
{
hInstance = GetModuleHandle(0);
DialogBoxParam(hInstance,(LPCTSTR)IDD_DIALOG1,0,&mainDlgProc,0);
return(0);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
IDOK改成别的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
return true~
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
这个RC 无法编译(改完了)
//Microsoft Developer Studio generated resource script.
//
#include <windows.h>
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
|
能力值:
( LV7,RANK:100 )
|
-
-
7 楼
或者return ::DefWindowProc();
return 0;表示消息尚未处理,是吧
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
返回TRUE也无效,点OK后,程序就退出了
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
郁闷,我放弃使用VC来写图形界面程序
|
能力值:
( LV12,RANK:1010 )
|
-
-
11 楼
不错, 这么容易就放弃了.
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
我用DELPHI写图形界面
初步计划:用C写一些DELPHI写起来比较困难的(说不准哪天高兴,我还钟情于C)
正因为我3天打渔,2天筛网,所以我现在还是一事无成
|
能力值:
( LV8,RANK:130 )
|
-
-
13 楼
太强大了。。
我都是直接生成的
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
HANDLE hConsole;
WM_INITDIALOG里加入
AllocConsole();
hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
在关键代码处加入 WriteConsole( hConsole, "11111", strlen( "11111" ), 0, NULL );
看执行到哪条
|