Archive for 8 7 月, 2009

PlaySound

星期三, 8 7 月, 2009

头文件:mmsystem.h

函数原型:BOOL WINAPI PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound)

参考http://zhidao.baidu.com/question/41366091.html

#include <windows.h>
#include <mmsystem.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
 int choice = MessageBox(NULL, TEXT(“重启计算机?”), TEXT(“重启”), MB_OKCANCEL | MB_ICONQUESTION | MB_DEFBUTTON2);
 if(choice == IDOK)
 {
  PlaySound(“C:WINDOWSMediaWindows XP 关机.wav”, NULL, SND_FILENAME | SND_ASYNC);
  MessageBox(NULL, TEXT(“关闭计算机……”), TEXT(“关闭”), MB_OK);
  PlaySound(NULL, NULL, SND_FILENAME);
  choice = MessageBox(NULL, TEXT(“启动计算机?”), TEXT(“启动”), MB_YESNO | MB_ICONQUESTION);
  if(choice == IDYES)
  {
   PlaySound(“C:WINDOWSMediaWindows XP 启动.wav”, NULL, SND_FILENAME | SND_SYNC);
   MessageBox(NULL, TEXT(“计算机已成功启动!”), TEXT(“启动成功”), MB_OK);
  }
 }
 return 0;
}

重启计算机

MessageBox

星期三, 8 7 月, 2009

函数原型:int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)

函数功能:创建、显示和操作一个消息框。消息框含有应用程序定义的消息标题和内容,加上预定义图标与按钮的任何组合。

hWnd标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。

lpText消息框内容,lpCaption消息框标题,uType指定一个决定对话框的内容和行为的位标志集。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
 MessageBox(NULL, TEXT(
Hello, windows!), TEXT(Msg), MB_OK);
 return 0;
}

有关uType取值可查看winuser.h

/*
 * MessageBox() Flags
 */
#define MB_OK                       0
×00000000L
#define MB_OKCANCEL                 0
×
00000001L
#define MB_ABORTRETRYIGNORE         0
×
00000002L
#define MB_YESNOCANCEL              0
×
00000003L
#define MB_YESNO                    0
×
00000004L
#define MB_RETRYCANCEL              0
×
00000005L
#define MB_ICONHAND                 0
×
00000010L
#define MB_ICONQUESTION             0
×
00000020L
#define MB_ICONEXCLAMATION          0
×
00000030L
#define MB_ICONASTERISK             0
×00000040L

注意到不同取值的分组位规律,采用按位或运算“|”进行组合。

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
 int choice = MessageBox(NULL, TEXT(“你是好人吗?”), TEXT(“你是好人吗?”), MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2);
 switch(choice)
 {
  case IDYES:
   MessageBox(NULL, TEXT(“一看你就不是好人,点击【确定】开始格式化C盘!”), TEXT(“是”), MB_OK | MB_ICONWARNING);
   break;
  case IDNO:
   MessageBox(NULL, TEXT(“尝试把你变成好人失败,是否重试?”), TEXT(“否”), MB_RETRYCANCEL);
   break;
  default:
   ;
 }
 return 0;
}

Win骨干代码

星期三, 8 7 月, 2009

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
 return 0;
}

关于仙三外传免CD免拔光驱

星期三, 8 7 月, 2009

近日看完了《仙剑奇侠传三》,想再玩次一直带有遗憾的仙三外传。Copy份仙三外传硬盘版。免CD免拔光驱的。

之前很正常的玩过,这次却费了番周折。

众所周知,为防盗版,仙三外传在保护方面还是下了一定工夫的。只不过,破解版的出现是必然。硬盘版完成了这样的工作,但也有未知的bug

按一般操作,使用starfuck屏蔽光驱,使用虚拟光驱模拟游戏CD,运行PAL3A.exe即可。结果竟要求输入序列号!

查看了下注册表(运行regedit),发现游戏必需的注册表信息没有。

先百度下序列号,C7UX2JNVCE3VSQAW8J6ZC7H2可用。序列号验证正确,发现游戏注册表Keys下出现了DISK4的序列号值。解决了第一个问题。

再运行下游戏,发现要求放入DISK4。应该是指定读取光驱的问题。

修改下游戏注册表

HKEY_LOCAL_MACHINE——SOFTWARE——SoftStar——PAL3A

编辑——新建——字符串值——命名为@

HKEY_LOCAL_MACHINE——SOFTWARE——SoftStar——PAL3A

编辑——新建——字符串值——命名为CDriver——修改其值为指定读取光驱的值,如H:

运行游戏。问题解决。并且发现不用starfuck屏蔽光驱也能运行游戏。