艾特商业网

sqlyog注册码在哪输入(sqlyog注册码)

更新时间:2023-08-20 15:21:30

导读 你们好,最近小艾特发现有诸多的小伙伴们对于sqlyog注册码在哪输入,sqlyog注册码这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往

你们好,最近小艾特发现有诸多的小伙伴们对于sqlyog注册码在哪输入,sqlyog注册码这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、 从网上下载SQLyog源代码并编译。具体过程可以参考我的另一个经验sqlyog源代码下载编译教程’,可以在我的经验文章中找到,如下图所示:

2、 使用vs2017(假设已经安装并支持MFC)打开SQLyog项目。sqlyog-community源代码目录下有一个构建目录,里面包含项目工程文件SQLyogCommunity.sln双击打开项目,如下图所示:

3、 跳过0 '表示SQLyog客户端程序已成功编译并生成,并且在'下生成了可执行exe文件SQLyogCommunity.exe.\ sqlyog-community \ bin \ win32 \ debug '目录,如下图所示:

4、 点击“本地获胜”.“调试器”启动正在运行的程序,并让其断点进入winmain函数的入口。程序启动后,断点先在WinMain函数中,如下图所示:

5、 可以看到,sqlyog项目的代码中有WinMain函数,WinMain是windows平台下应用的入口函数。具体来说,Winmain()函数是Win32程序的入口点,也就是说sqlyog项目是由Win32 SDK编码开发的。

6、 WinMain函数原型:

7、 int WINAPI WinMain(HINSTANCE hInstance,

8、 HINSTANCE hPreInstance,

9、

10、 LPSTR lpCmdLine,

11、

12、 int nCmdShow

13、 );

14、 当前实例的句柄。

15、 HPrevInstance -上一个实例的句柄

16、 LpCmdLine -命令行参数

17、 NCmdShow - Form显示表单(最大化和最小化)

18、 在windows下,win32 sdk编写应用程序的一般步骤如下:

19、 (1)实现函数WinMain,即根据其原型在源代码中定义;

20、 (2).创建一个窗口;

21、 (3).传播消息;

22、 (4)编写窗口程序函数。

23、 了解win32 sdk的编程步骤,用sqlyog项目的代码一步步分析。

24、 sqlyog项目代码中有一个名为WinMain.cpp的文件,函数WinMain就是在这个文件中实现的。代码如下:

25、 //Function:

26、 //The main function of the application.

27、 //The start of the software.

28、 wyInt32 WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance,

29、 PSTR cmdline, wyInt32 icmdshow)

30、 {

31、 .

32、 return msg.wParam;

33、 }

34、 详情如下:

35、 WinMain函数以一系列变量声明开始,定义配置和相关的初始化,如下面的代码所示:

36、 HINSTANCEhrich, hsci;

37、 #ifdef BLACKBOX

38、 HINSTANCEhblackbox;

39、 #endif

40、 FrameWindow *mainwin;

41、 MSG msg;

42、 wyBoolisVistaAnd32BitSQLyog=wyFalse;

43、 pGlobals=new GLOBALS;

44、

45、 _ASSERT(pGlobals !=NULL);

46、 //DEBUG_ENTER('WinMain');

47、 //call mysql_library_init to avoid crash

48、 if (mysql_library_init(0, NULL, NULL)) {

49、 DisplayErrorText(1, _('could not initialize MySQL library'));

50、 return 0;

51、 }

52、 //First clear every stuff in the pglobals variable.

53、 InitGlobals(pGlobals);

54、 InitWinSock();

55、 ///*Checks whether commandline argument as got explicit path for .ini, and other logfiles.

56、 //also filename whose contents as to be displayed in Sqlyog Editor

57、 //Otion can be any of one

58、 //i. SQLyogEnt.exe -dir 'E:\path' -f 'D:\test.sql'

59、 //ii. SQLyogEnt.exe -dir 'E:\path' 'D:\test.sql'

60、 //iii. SQLyogEnt.exe -f 'D:\test.sql' -dir 'E:\path' -f

61、 //-dir stands for explicit path for .ini, tags, logs, favourites , etc

62、 //-f stands for file to be oponed in editor

63、 //*/

64、 //Gets the Attributes passed through command line(-f, -dir)

65、 if(pGlobals-m_configdirpath.GetLength())

66、 //unsigned long len=0;

67、 //if(len=pGlobals-m_configdirpath.GetLength())

68、 pGlobals-m_configdirpath.Clear();

69、 if(GetConfigDetails(cmdline)==wyFalse)

70、 return 0;

71、 CreateInitFile();

72、 #ifndef _WIN64

73、 OSVERSIONINFOEX osvi;

74、 osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);

75、 //get the OS version and set the display style accordingly

76、 if (GetVersionEx((OSVERSIONINFO*)osvi)) {

77、 if (osvi.dwMajorVersion==6 osvi.dwMinorVersion==0 osvi.wProductType==VER_NT_WORKSTATION)

78、 isVistaAnd32BitSQLyog=wyTrue;

79、 }

80、 #endif

81、 #ifdef _DEBUG

82、 HANDLE hlogfile=NULL;

83、

84、 hlogfile=CreateFile(L'SQLyog_debug_log.txt', GENERIC_WRITE, FILE_SHARE_WRITE,

85、 NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

86、 #else

87、 //Initialize the Path for .INI .dmp files

88、 CreateInitFile();

89、 if (isVistaAnd32BitSQLyog==wyFalse) {

90、 MiniDump dumpcrash;

91、 if (IsCrashDumpSupported()==wyTrue)

92、 dumpcrash.InitDumpDetails(pGlobals-m_configdirpath.GetString());

93、 }

94、 #endif

95、 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW);

96、 _CrtSetReportFile(_CRT_WARN, hlogfile);

97、 _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW);

98、 _CrtSetReportFile(_CRT_ERROR, hlogfile);

99、 _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_WNDW);

100、 _CrtSetReportFile(_CRT_ASSERT, hlogfile);

101、 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE );

102、 _CrtSetReportFile(_CRT_WARN, hlogfile);

103、 _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE );

104、 _CrtSetReportFile(_CRT_ERROR, hlogfile);

105、 _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE );

106、 _CrtSetReportFile(_CRT_ASSERT, hlogfile);

107、 _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

108、 VERIFY(hsci=:LoadLibrary(L'SciLexer.dll'));

109、 if(!hsci)

110、 {

111、 DisplayErrorText(GetLastError(), _('Error loading SciLexer.dll'));

112、 VERIFY(FreeLibrary(hsci));

113、 return 0;

114、 }

115、 pGlobals-m_statusbarsections=STATUS_BAR_SECTIONS;

116、 /* register scintilla */

117、 //Scintilla_RegisterClasses(NULL);

118、 #ifndef VC6

119、 /* startup gdiplus.this is required to display image in BLOB window */

120、 ULONG_PTRgditoken;

121、 Gdiplus:GdiplusStartupInput startupinput;

122、 Gdiplus:GdiplusStartup(gditoken, startupinput, NULL);

123、 #endif

124、 pGlobals-m_hinstance=hinstance;

125、 VERIFY(hrich=:LoadLibrary(L'Riched20.dll'));

126、 #ifdef BLACKBOX

127、 VERIFY(hblackbox=:LoadLibrary(L'BlackBox.dll'));

128、 #endif

129、 /* check for library problems */

130、 if(!hrich)

131、 {

132、 DisplayErrorText(GetLastError(), _('Error loading riched20.dll'));

133、 VERIFY(FreeLibrary(hsci));

134、 return 0;

135、 }

136、 为整个sqlyog项目的初始化做准备。

137、 初始化准备工作完成以后, 使用以下代码来创建sqlyog软件相关的窗口:

138、 pGlobals-m_findreplace=wyFalse;

139、 CreateCustomTabIconList();

140、 //Initialize the common controls.

141、 InitCustomControls();

142、 CollectCurrentWindowsVersion();

143、 pGlobals-m_modulenamelength=GetModuleNameLength();

144、 wyTheme:SubclassControls();

145、 if(!pGlobals-m_modulenamelength)

146、 {

147、 DisplayErrorText(GetLastError(), _('GetModuleFileName length failed!'));

148、 return 0;

149、 }

150、 SetLanguage(NULL, wyTrue);

151、 wyTheme:Init();

152、 //Create the mainwindow.

153、 mainwin=new FrameWindow(pGlobals-m_hinstance);

154、 类FrameWindow是sqlyog客户端的主界面窗口对应的类函数, 也就是整个应用程序的主窗口, 定义实现的文件在FrameWindow.h和FrameWindow.cpp, 这样子就有了程序的主框架窗口了, ui界面层的最大部分我们已经知道是如何生成的了。

155、 sqlyog客户端主界面确立以后, 接下来我们就需要事先消息循环了, 整个循环主要是来处理消息的,代码如下所示:

156、 //The main loop for messages.

157、 while(GetMessage(msg, NULL, 0, 0))

158、 {

159、 if(pGlobals-m_pcmainwin-m_finddlg)

160、 {

161、 if((pGlobals-m_pcmainwin-m_finddlg IsWindowVisible(pGlobals-m_pcmainwin-m_finddlg)

162、 IsDialogMessage(pGlobals-m_pcmainwin-m_finddlg, msg)))

163、 {

164、 pGlobals-m_findreplace=wyTrue;

165、 continue;

166、 }

167、 }

168、 if(!TranslateMDISysAccel(pGlobals-m_hwndclient, msg))

169、 {

170、 if(!(TranslateAccelerator(mainwin-GetHwnd(), g_accel, msg)))

171、 {

172、 ///code to catch Accel(short-cuts for Save Revert) key-press on Create/Alter table tabbed interface

173、 if(pGlobals-m_pcmainwin-m_htabinterface IsDialogMessage(pGlobals-m_pcmainwin-m_htabinterface, msg))

174、 {

175、 continue;

176、 }

177、

178、 if(pGlobals-m_pcmainwin-m_hwndtooltip msg.message==WM_LBUTTONDOWN)

179、 {

180、 FrameWindow:ShowQueryExecToolTip(wyFalse);

181、 }

182、 pGlobals-m_findreplace=wyFalse;

183、 TranslateMessage(msg);

184、 DispatchMessage(msg);

185、 }

186、 }

187、 }

188、 上面代码开启了消息循环。

189、 Windows操作系统为每一个正在运行的应用程序保持有一个消息队列。

190、 当有事件发生后, Windows并不是将这个激发事件直接送给应用程序,

191、 而是先将其翻译成一个Windows消息,

192、 然后再把这个消息加入到这个应用程序的消息队列中去。

193、 应用程序需要通过消息循环来接收这些消息。

194、 即Windows 中有一个系统消息队列, 对于每一个正在执行的Windows应用程序, 系统为其建立一个'消息队列', 即应用程序队列,用来存放该程序可能创建的各种窗口的消息。

195、 应用程序中含有一段称作'消息循环'的代码,

196、 用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。

197、 Windows是以消息驱动的操作系统, Windows 消息提供了应用程序与Windows系统之间进行通讯的手段。

198、 Windows应用程序是基于消息的程序设计模式, 使用事件驱动编程模型,

199、 分为消息概述、消息结构、消息类型。

200、 消息循环代码是应用程序中主函数WinMain ( )中类似如下的程序段:

201、 while(GetMessage(msg,NULL,0,0))

202、 {

203、 TranslateMessage(msg); //从消息队列中取得消息

204、 DispatchMessage(msg); //检索并生成字符消息WM_CHAR

205、 //将消息发送给相应的窗口函数

206、 }

207、 由此可见, 所谓'消息循环', 实际是程序循环。

208、 可以看到sqlyog客户端应用程序的消息循环就是在WinMain.cpp中实现的。

209、 由于Windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数, 窗口函数程序代码形式上是一个巨大的switch 语句, 用以处理由消息循环发送到该窗口的消息, 窗口函数由Windows 采用消息驱动的形式直接调用,

210、 而不是由应用程序显示调用的, 窗口函数处理完消息后又将控制权

211、 返回给Windows。

212、 也就是说sqlyog客户端应用程序中的每个窗口都会注册一个相应的窗口函数, 而每个窗口都对应有一个头文件和一个cpp文件, 举例如'Connect to MySQL Host'这个窗口(File---New Connection.), 可以看到整个过程的调用代码堆栈图下图所示, 可以看到最顶层的是FrameWindow:WndProc()函数,

213、 //The window procedure for MainWindow.

214、 //It creates all its child window in WM_CREATE message.

215、 LRESULTCALLBACK FrameWindow:WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)

216、 {

217、 .

218、 }

219、 整个函数窗口过程函数在WM_CREATE消息响应时候创建了所有子窗口,

220、 case WM_CREATE:

221、 pcmainwin-OnCreate();

222、 return 0;

223、 函数代码如下:

224、 void FrameWindow:OnCreate()

225、 {

226、 // CreateToolBarWindow();

227、 CreateStatusBarWindow();

228、 CreateMDIWindow();

229、 m_findmsg=RegisterWindowMessage(FINDMSGSTRING);

230、 CheckForAutoKeywords();

231、 ConvertIniFileToUtf8();

232、 MigrateFiles();

233、 //MigratePersonalFolderToFavorites();

234、 return;

235、 }

236、 在这里创建了主界面窗口的子窗口, 每个子窗口都有一个窗口过程函数来处理各自的消息, 到此sqlyog客户端整个主体框架分析完毕。

以上就是sqlyog注册码这篇文章的一些介绍,希望对大家有所帮助。

免责声明:本文由用户上传,如有侵权请联系删除!