[VC++]控制台程序窗口隐藏

VC++隐藏DOS窗口:从原理到实践的4种核心方法 在Windows程序开发中,理解控制台程序与图形界面程序的差异是基础。控制台程序默认链接到控制台子系统,系统会为其分配DOS窗口;而Windows桌面程序链接到Windows子系统,从根本上避免了控制台窗口的产生。这一机制的核心在于程序的入口函数和链接器子系统设置。掌握进程创建与控制技术,特别是CreateProcess API配合STARTUPINFO结构,能够实现对子进程窗口状态的精细控制,这对于开发后台服务、系统工具等需要静默运行的程序至关重要。在实际应用中,无论是运行批处理文件还是调用命令行工具,通 阅读详情
HWND   hWnd;  

  SetConsoleTITle("HEHE");  

  hWnd=::FindWindow(NULL,"HEHE");  

  ShowWindow(hWnd,SW_HIDE); 

当创建一个控制台程序时,又不想看到其窗口可用如下代码解决:

#ifdef NDEBUG
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#endif

首先来看一下linker的 /subsystem 选项  该选项的语法形式如下:
  
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
  
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|WINDOWSCE}
  [,major[.minor]] 

 这个链接选项告诉操作系统如何运行可执行文件  CONSOLE:
  win32 字符模式应用程序,此种类型的应用程序在运行的时候会产生一个类似DOS窗口的控制台窗口,如果在应用程序的主函数为main()或者wmain(),在默认情况下该应用程序就是一个控制台应用程序

  Extensible Firmware Interface和CPU具体架构相关的一个参数选项,并不常用,在这里暂不详细介绍.如果对此有兴趣的可以访问intel主页来查看相关内容
   NATIVE;
  设备驱动器选项,如果/DRIVER:WDM选项被设定的话,该链接选项(NATIVE)就为默认选项  

  POSIX:
  在windows NT 种运行在POSIX子系统上的应用程序  

  WINDOWS:
  该类型的应用程序不产生console窗口,该类型的应用程序的窗口由用户自己创建,简而言之就是一个标准的Win32 application,其入口地址为WinMain()函数或者wWinMain()函数的地址如果你在应用程序种定义的主函数为WinMain或者wWinMain,在默认情况下该应用程序就是一个Win32 Application !  

  WINDOWSCE:
  运行在windows CE上的应用程序  

  major and minor (optional):
  主版本号和次版本号,该选项为可选,该选项为0~65535之间的十进制整数  

  从上面可以看出如果我们建立一个win32 console application的话,linker的/subsystem选项应该为CONSOLE,可以在VC开发环境的project->setting->link->project option中看到!  
  接下来我们再看看应用程序是如何运行的!
  我们知道用VC编写的程序,运行的时候是需要 C\C++运行库支持的.当我们运行一个C/C++程序的时候链接器会首先寻找应用程序的启动函数,例如
:
  如果你建立了一个console程序的话,编译器得链接开关会是以下这种形式

  /subsystem:"console" /entry:"mainCRTStartup"  (ANSI)
  
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)
  

  如果你建立了一个win32 application,编译器得链接开关则会是一下形式
  /subsystem:"windows" /entry:"WinMain"  (ANSI)
  /sbusystem:"windows" /entry:"wWinMain" (UINCODE)  

  上面的两种形式可以再project->setting->link->project option中看到上面的subsystem和entry并不需要都设置,如果你只设置了/subsystem:"console"的话,那么默认的entry开关在默认情况下应为/entry:"mainCRTStartup"反之,如果你在应用程序中定义了main函数的话,默认情况下,你的/subsystem开关应该为/system:"console"  
  在默认情况下/subsystem 和/entry开关是匹配的,也就是console对应mainCRTStartup或者wmainCRTStartupwindows对应WinMain或者wWinMain  
  但是我们也可以通过手动改动的方式使他们不匹配  
  例如我们可以这样改动  
  #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址  
  int main(int argc, char* argv[])

  {
  
MessageBox(NULL, "hello", "Notice", MB_OK);
  
return 0;
  }  

  在默认情况下链接器看到/subsystem下是windows选项的时候,它会自动寻找WinMain或者wWinMain  
  但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!但我们强制指定入口地址,这样运行程序的时候默认的console窗口就会隐藏!
上面是在代码中使用#pragma指令来设置,还有一种就是直接在开发环境的

project->setting->link->project option中手工改动!
写了这么多,自己都有点感觉乱,没有办法,以前没写过什么文章,所以措辞可能不太好,希望大家见谅。

1:如果console程序已经写好了,不能改了,也可以。写一个API程序,不要画窗口,然后用CreateProcess调用写好的console程序,把属性设成SW_HIDE即可。
2:不能用控制台来写(CONSLOE),要用WINMAIN做入口就可以了,不画窗口,别人就都看不见了. 你只用想想办法把你的进程在任务栏里面隐藏住就可以.
3:如果是console程序,用API函数GetStdHandle()获得控制台程序的窗口句柄,然后在隐藏窗口

4://这一句隐藏控制台
#pragma   comment(linker,"/subsystem:\"windows\"  /entry:\"mainCRTStartup\"" )
你要写控制台程序就用这个

VC下揭开“特洛伊木马”的隐藏面纱

一、引言
  “特洛伊木马”曾在网上造成很大恐慌,此类黑客程序通过欺骗手段在普通网络用户端安装木马的服务端,使用户的计算机在上网时留有后门,而黑客则可以通过这个后门对被感染的计算机随心所欲地进行监视、破坏。显然这种黑软对于普通网络用户的危害是非常严重的。

  就本质而言黑客软件仍然属于应用程序,是基于套接字的网络通讯程序。因此黑客能成功攻击被感染计算机的一个非常必要的先决条件就是此时被攻击方已经有木马程序的服务端在运行。由于木马程序是一种恶意程序,能在被攻击者没有察觉的情况下悄悄启动运行为攻击者打开后门,故显然不能象其他程序一样堂而皇之的显示在任务栏和任务列表中,否则会立即为用户所察觉而将其关闭,也就失去了为攻击者提供后门的作用。本文下面就针对其隐藏程序的机理展开讨论。

  二、程序在任务栏中的隐藏原理

  程序在任务栏的隐藏比较简单,首先要保证程序主界面的隐藏,一般是通过修改应用程序类的初始化实例函数InitInstance()的ShowWindow()语句的SW_SHOW参数为SW_HIDE来实现的。主界面隐藏的同时任务栏虽然也会消失,但在程序启动时会闪一下,因此需要修改程序的扩展属性。一种方法是SDK的写法,即直接利用GetWindowLong()获取到当前的扩展属性然后通过逻辑运算去掉原有的WS_EX_APPWINDOW属性,并新添加一个WS_EX_TOOLWINDOW属性,这样系统会将其认为是一个工具条窗口而不会再在任务栏中加以显示。最后需要将修改过的扩展属性通过SetWindowLong()函数将其写回。这两个函数的声明分别如下:

  LONG GetWindowLong(HWND hWnd,int nIndex);
  
LONG SetWindowLong(HWND hWnd,int nIndex,LONG dwNewLong);
  另一种很简便的是MFC的写法:在程序框架类的预创建窗口函数里通过直接对CREATESTRUCT结构对象的逻辑操作而将程序属性进行改变:

  
cs.style=WS_POPUP;
  cs.dwExStyle 
=WS_EX_TOOLWINDOW;
  这两种写法虽然表现形式各不相同,其本质都是一样的。

三.程序在任务列表中的隐藏原理
  任务列表(Ctrl+Alt+Del时弹出的对话框)显示了当前系统正在运行的一些应用程序,如果实现了上一步,虽然在任务栏看不见程序,但有经验的用户可以通过观察任务列表而发现一些值得怀疑的应用程序而在此将其关闭。所以大多数黑软也都通过较复杂的手段实现了自身在任务列表中的隐藏,使被发现的机会大大降低。

  在Win9x/2000中,一般每个应用程序都要通过一个API(应用程序接口)函数RegisterServiceProcess()向系统申请注册成为一个服务进程,并且也是通过这个函数注销其服务进程来结束这个服务进程的运行。如果一个进程注册为一个服务进程,通过Ctrl+Alt+Del就可以在任务列表里看见该进程的标题。而如果一个进程运行了但没有向系统申请注册成为服务进程那么就不会在任务列表里显示。黑软也正是利用这个原理使自身在运行时能在任务列表中实现隐藏。该函数存放于系统内核Kernel32.dll中,具体声明如下:

  
DWORD RegisterServiceProcess(DWORD dwProcessId,DWORD dwType);
  其第一个参数指定为一个服务进程的进程标识,如果是0则注册当前的进程;第二个参数指出是注册还是注销当前的进程,其状态分别为:RSP_SIMPLE_SERVICE和RSP_UNREGISTER_SERVICE。黑软一般是在程序启动初始化时首先从Kernel32.dll动态连接库中将RegisterServiceProcess()函数加载到内存,然后再通过该函数将程序从任务列表中隐藏:

  //从Kernel32.dll中加载RegisterServiceProcess()

  
HMODULE m_hKernel=::GetModuleHandle("Kernel32.DLL");
  
RSP m_rsp=(RSP)::GetProcAddress(m_hKernel,"RegisterServiceProcess");
  m_rsp(::GetCurrentProcessId(),1);//此时为隐藏,当第二个参数为0时显示

  另外,还有一部分黑软是通过ShowWindowAsync()函数启动一个新的线程来显示一个新窗口的。该函数的原形为:

  
BOOL ShowWindowAsync(HWND hWnd,int nCmdShow);
  而黑软正是钻了该函数的第二个参数可以设置窗体显示状态的空子,在设置成SW_HIDE时就可以使目标窗体(黑软)从任务列表中隐藏。

  四、小结

  以上就是Win9x/2000下的黑客程序所具备的一些基本功能,在此基础上我们可以借助于其实现技巧来编写出一些诸如后台监控之类的实用程序。并且可以通过对黑客类软件的隐藏机理的分析能使广大用户对此类黑软采取一些必要的措施,通过加强防范来使自己的损失防患于未然。

VC窗口启动时隐藏

最近经常见论坛上有人问,程序在启动时如何隐藏。以下是我总结的一些方法,欢迎大家讨论,找出更好的方法。

    对于这类问题,大家最容易想到的可能就是在PreCreateWindow中添加cs.style &=~WS_VISIBLE;这是不可行的。程序仍可使用ShowWindow()将窗体显示出来.

1.基于对话框的程序
   我在论坛上看到有人说在OnInitDialog()中加上ShowWindow(SW_HIDE)对话框便不出现了,其实是不可行的。至于原因,我认为是系统是在OnInitDialog()后调用ShowWindow(SW_SHOW)让对话框显示的.可以添加下面代码:
CXXDlg::OnInitDialog()
{
...
Sleep(5000);
return TRUE;
}
可以发现5秒后对话框才显示出来.至于在何时调用的我也不清楚,但是我们可以在OnPaint()中加上ShowWindow(SW_HIDE),来达到隐藏的目的.不过使用的这种方法,会有一点闪烁.另外一种方法就是在OnInitDialog()中使用SetWindowPlacement()

GetWindowPlacement(&m_wp); //恢复时用
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);//从任务栏中去掉.

WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(&wp);

还有一种更简单的方法:在OnInitDialog()中调用下面代码.
SetWindowPos(&wndTop,0,0,0,0,NULL);

2.基于单文档的程序

我们一般采用的方法就是将InitInstance()中的:
CXXApp::InitInstance()
{
   //m_pMainWnd->ShowWindow(SW_SHOW);
}
但是这样窗体还会有闪烁。

因为MFC还要在ActiveFrame显示框架,所以我们还需要添加下面代码:
void CMainFrame::ActivateFrame(int nCmdShow)
{
   nCmdShow=SW_HIDE;
   CFrameWnd::ActivateFrame(nCmdShow);
}
或者
:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   AfxGetApp()->m_nCmdShow=SW_HIDE;
}
顺便说一下,上面通过ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW)的方法来实现从任务栏去掉按钮,这样当显示时还要切换显示的模式,其实还可以通过调用TaskbarList组件直接删除和添加
:
ITaskbarList的定义在shobjidl.h(vs.net)中。

也可以手动定义:
DECLARE_INTERFACE_(ITaskbarList,IUnknown)
{
   STDMETHOD(QueryInterface)(THIS_ REFIID riid,LPVOID* ppvObj) PURE;
   STDMETHOD_(ULONG,AddRef)(THIS) PURE;
   STDMETHOD_(ULONG,Release)(THIS) PURE;
   STDMETHOD(ActivateTab)(HWND) PURE;
   STDMETHOD(AddTab)(HWND) PURE;
   STDMETHOD(DeleteTab)(HWND) PURE;
   STDMETHOD(HrInit)(void) PURE;
};
BOOL CMy2App::InitInstance()
{
   CoInitialize(0);
   ITaskbarList *pObj;
   CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&pObj);
   pObj->DeleteTab(m_pMainWnd->m_hWnd); //从任务栏上删除

   //pObj->AddTab(m_pMainWnd->m_hWnd); //添加

   pObj->Release();
   CoUninitialize();
}

所以我们还可以用将窗体最小化,并从任备栏上删除按钮的方法来实现隐藏.

有很多应用程序要求一起动就隐藏起来,这些程序多作为后台程序运行,希望不影响其他窗口,往往只在托盘区显示一个图标。这些程序通常都是对话框程序,而对话框在初始化的过程上与SDI、MDI的初始化是不同的,对话框只需要DoModule或者是CreateDialog等等对话框函数调用一次便可,SDI、MDI则要好几步才行。这样看来,对话框在使用方法上面是隐藏了不少细节的,其中就没有SDI、MDI所要求的ShowWindow(nCmdShow)这一步。因此对话框要想一运行就隐藏,并不是很直接的。有一些方法可以做到这一点,下面我们就来看看几种方案。
1.定时器

最直观,又是最无奈的一个方法就是使用定时器。既然我们在对话框开始显示之前不能用ShowWindow(SW_HIDE)将其隐藏,那就给一个时间让它显示,完了我们在隐藏它。

方法:

1.在OnInitDialog()函数里设置定时器:(WINDOWS API里面响应消息WM_INITDIALOG)

SetTimer(1, 1, NULL);
2.添加处理WM_TIMER的消息处理函数OnTimer,添加代码:

if(nIDEvent == 1)
{
DeleteTimer(1);
ShowWindow(SW_HIDE);
}
这种方法的缺点是显而易见的,使用定时器,使得程序的稳定性似乎打一个折扣;窗口是要先显示出来的,那么效果就是窗口闪了一下消失。

2.改变对话框显示状况

在对话框初始化时改变其显示属性可以让它隐藏起来。方法是调用SetWindowPlacement函数:

BOOL CDialogExDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//DO something
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(&wp);
return TRUE;
}
在需要显示时(通常是响应热键或者托盘图标的鼠标消息):

WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_SHOW;
SetWindowPlacement(&wp);
这样的效果很不理想:窗口显示在屏幕的左上角,并且是只有标题栏,要正常显示,还需加上如下代码:
定义一个成员变量
CRect rect;
在OnInitDialog()里面:

GetWindowRect(&rect);
在需要显示的地方:

SetWindowPos(&wndNoTopMost, wndRc.left, wndRc.top, wndRc.right, wndRc.bottom, SWP_SHOWWINDOW);
CenterWindow();
即使这样,效果还是很差。

这种方法还有一个弊端是当程序开始运行并且隐藏起来后,原来激活的窗口变成了非激活状态了,而当对话框显示出来后,对话框自身也是非激活状态的。


3.不绘制窗口
当对话框显示时将要响应消息WM_PAINT绘制客户区,相应消息WM_NCPAINT绘制窗口边框。我们在窗口第一次自绘自身时隐藏窗口,可以收到比较良好的效果。由于窗口是先画窗口边框,所以我们仅需处理WM_NCPAINT即可。代码如下:

添加WM_NCPAINT处理函数。
void CMyDialog::OnNcPaint()
{
static int i = 2;
if(i > 0)
{
i --;
ShowWindow(SW_HIDE);
}
else
CDialog::OnNcPaint();
}
这里有个问题:为什么要定义静态变量i而且设其值为2呢?

我们只要窗口隐藏第一次,所以定义这个变量可以判断是否时首次显示窗口。当程序开始运行时,系统发送(SendMessage)WM_NCPAINT消息,此时程序的窗口边框应该被显示,但是此时我们没有作任何显示的操作,而是将窗口隐藏,ShowWindow(SW_HIDE)将把窗口的WS_VISIBLE属性去掉,继续执行,程序将检查WS_VISIBLE属性,如果没有则显示窗口,所以又发送了一个WM_NCPAINT消息。所以我们要处理两次WM_NCPAINT消息。

在需要窗口显示时,调用ShowWindow(SW_SHOW)即可。

程序执行的结果是,原来处于激活状态的窗口可能会闪动两下,然后仍然处于激活状态。这种处理方式比上面的方式要优越得多。

4.将对话框作为子窗口

这种方法是采用SDI框架,主窗口始终隐藏,对话框作为主窗口的成员变量,在CMainFrame::OnCreate()里面加入下代码:

if(!dlg.Create(IDD_MYDIALOG, this))
{
return –1;
}
dlg.ShowWindow(SW_HIDE);
在要显示对话框的地方用dlg.ShowWindow(SW_SHOW);即可。注意,主窗口一定要隐藏,否则对话框可能会闪现一下。

隐藏状态栏窗口

上面介绍了几种检查对话框的方法,大家如果试过的话可能已经注意到系统状态栏里在程序启动时会有程序的图标闪过,在隐藏对话框的时候这个也是要隐藏的,方法很简单:

在OnInitDialog()函数里面加上ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);即可。在要显示窗口的地方加上代码ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW);即将窗口的扩展样式改回来。

C++实现隐藏控制台应用程序后台运行 总结起来,通过使用Windows API函数来隐藏控制台窗口,我们可以实现C++控制台应用程序在后台运行的效果。同时,通过重定向输出或禁用输出,我们可以控制控制台应用程序的输出行为。在C++中,我们可以使用一些技巧来隐藏控制台应用程序的窗口,并使其在后台运行,而不显示在用户的桌面上。这在某些情况下是有用的,例如当我们希望在后台执行一些任务而不干扰用户的操作。需要注意的是,由于这是一个控制台应用程序,它仍然会在后台运行并输出到控制台。如果你不想看到输出,你可以将输出重定向到一个文件或者禁用输出。 阅读详情

相关推荐

VC++中隐藏DOS窗口的实现方法

在Windows操作系统中,每一个图形用户界面(GUI)程序都有一个特殊的入口点,即WinMain函数。这个函数是程序启动时被调用的,与我们熟知的控制台程序的main函数有所不同。WinMain函数扮演的角色至关重要,因为它是Windows应用程序开始执行的起点,负责进行程序初始化和消息循环的设置。WinMain函数的参数提供了一些程序运行环境的上下文信息,让我们逐一了解这些参数:HINSTANCE hInstance:当前程序实例的句柄,用于标识程序的唯一性。

weixin_34520664的博客 846

C++ 如何隐藏控制台

C++ 如何隐藏控制台 如上图所示,如何把控制台隐藏掉 方法一 #include <Windows.h> int main(int argc,char* argv[]) { ShowWindow(GetConsoleWindow(),SW_HIDE); /* GetConsoleWindow()函数用来获得控制台窗口句柄 ShowWindow()函数用来设置窗口属性 SW_HIDE是隐藏属性 */ MessageBox(NULL,("内容"),("标题"),MB_OK); r

开发。小白 的博客 6286

从驱动编译到数据传输:RK3588与FPGA的PCIe通信实战解析

本文详细解析了RK3588与FPGA通过PCIe通信的实战过程,涵盖驱动编译、数据传输及性能优化等关键步骤。通过XDMA驱动实现高效DMA传输,适用于视频处理、数据采集等高性能场景,帮助开发者快速掌握嵌入式系统中的PCIe通信技术。

weixin_29214691的博客 524

C++ 控制台程序隐藏方法

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 在程序中加上如上语句,可以隐藏控制台窗口。 完整代码: #include<windows.h> #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 设置入口地址 int main() { MessageBox(NULL..

technologyleader的专栏 5161

来自工业界的知识库 RAG 服务(二),RagFlow 源码全流程深度解析

前面介绍过有道 QAnything 源码解析,通过深入了解工业界的知识库 RAG 服务,得到了不少调优 RAG 服务的新想法。因此本次趁热打铁,额外花费一点时间,深入研究了另一个火热的开源 RAG 服务RagFlow的完整实现流程,希望同样有所收获。首先依旧可以先从框架图入手,与常规的 RAG 架构进行一些比较可以看到右侧知识库被明显放大,同时最右侧详细介绍了文件解析的各种手段,比如OCR等,这些在常规的 RAG 中可能会作为一个不起眼的。

易迟的专栏 2万+

国产SR8201F以太网PHY芯片调试避坑指南:从机贴失败到杜邦线救场的实战记录

本文详细介绍了国产SR8201F以太网PHY芯片的调试避坑指南,涵盖硬件设计、PCB布局、SMT贴片及软件驱动等关键环节。通过实战案例解析,帮助工程师解决MII/RMII接口配置、电源设计、信号完整性等典型问题,提升以太网通信稳定性与EMC性能。

c6d7e8f9g的博客 1216

VC++ 显示或隐藏控制台窗口关闭按钮

正确做法应为:控制台程序工作时禁止关闭按钮,控制台程序完全结束之前启用关闭按钮。(因为控制台可能在 PowerShell、CMD、VSConsole 之中被宿主化运行)一个需要确保关闭时做处理的程序,应当禁止用户点击控制台窗口上面的关闭按钮,强制关闭程序,否则可能会产生严重的问题。

liulilittle的博客 1152

Vivado时序违约小结

目录1. setup time违约1.1 逻辑级数太高1.2 Fanout太大2. hold time 违约2.1 异步信号处理导致hold time违约 1. setup time违约 建立时间是工程设计中最常遇到的问题了。一般说来,导致建立时间违例主要有两个原因:逻辑级数太大或者扇出太大,当然也可以尝试通过降频来解决建立时间违约。 1.1 逻辑级数太高 Levels指的是逻辑级数logic level,一个logic level的延迟对应的是一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能

mu_guang_的博客 7155

VC++ 如何隐藏控制台程序窗口

VC++ 如何隐藏控制台程序窗口 2010-02-07 10:16:38 分类: C/C++ 大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如

autumn20080101的专栏 1201

41-dify案例分享-基于database插件实现Text2sql的数据库查询图表工作流

本文介绍基于 Text2SQL 的 Dify 工作流实现过程。先阐述 Text2SQL 概念、步骤及应用领域。接着说明工作流制作,包括用 chatflow 加开场白、获取系统时间,配置 LLM 生成 SQL,用 SQL Execute 工具查询,经 LLM 汇总结果,代码生成 ECharts 数据,条件分支判断图表类型输出。最后介绍验证测试、提供体验地址,还提及借助工具生成建表和初始化数据 SQL 语句。

个人技术 1万+

通过Jlink和PyLink读取蓝牙mac地址--Nordic&silicon labs

本文介绍在不开机的情况下读取蓝牙的mac地址,这里介绍两个平台,Nordic和Silicon Labs。 1. 通过Jlink Commander工具连接上目标板 选择当前芯片的型号 2. 使用mem命令查看mac地址 首先需要知道mac地址存储在芯片的哪个地址。 Nordic: 寄存器DEVICEADDRTYPE的第一个bit代表mac地址的类型,这里为1。DEVICEADDR[0]和DEVICEADDR[1]的低16bit代表了MAC地址,其中DEVICEADDR[1]的第15位应该或上DE

ching的专栏 1650

VC++ 隐藏控制台程序窗口

转自:http://hi.baidu.com/sicceer/blog/item/d9c35a810d15c4c8bc3e1ec8.html 设置 #pragma comment( linker, "/subsystem:/ "windows/ " /entry:/ "mainCRTStartup/ " " ) // 设置入口地址 这样就ok了 在控制台程序中隐藏控制台窗口! 大家都知道,...

网络资源是无限的 5050

PCB高速信号换层孔新技术:VECS(Vertical Conductive Structure Technology)解析

摘要:垂直导电结构(VeCS)是一种新型PCB互连技术,由平板信号走线和椭圆形接地层构成半同轴结构,相比传统过孔具有显著优势。通过全波仿真和实测验证,VeCS展现出更好的阻抗连续性、更低的插入损耗和回波损耗,以及优异的串扰抑制能力。其椭圆形接地结构能有效隔离电磁干扰,在相同布线密度下远端串扰比传统过孔降低约50%。VeCS制备工艺与传统PCB工艺兼容,无需新增设备,且能实现更高密度互连。测试结果显示,2.5英寸带状线通道中VeCS结构的信号完整性表现明显优于传统过孔,为高速数字系统提供了更可靠的垂直互连解决

小孟同学的博客 200

VC++技巧 在控制台程序中隐藏控制台窗口

当创建一个控制台程序时,又不想看到其窗口可用如下代码解决:<br /><br />#ifdef NDEBUG<br />#pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )<br />#endif<br /><br />首先来看一下linker的 /subsystem 选项<br /><br />  该选项的语法形式如下:<br />  /SUBSYSTEM:{CONSOLE|EFI_APPLICATION

oathevil的专栏 888

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

DICOM标准:深入详解DICOM医学影像中的覆盖层(Overlay)

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1562

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC++控制台程序隐藏窗口运行

程序会直接弹出一个对话框,而没有CMD控制台窗口出现。

m0_60352504的博客 807

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

[VC++]控制台程序窗口隐藏(网络转载)

大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口 因为此种方法是通过设置编译器的链接开关来实

awenC++ 627

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC++6.0在控制台程序中隐藏控制台窗口[转]

大家都知道,当编写一个win32 console application时,当运行此类程序的时候 默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只想在程序 中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自 动退出. 下面就介绍一下,如何隐藏win32 console application的console窗口 因为此种方法是通

xiliang_pan的专栏 2399

(转自 ncode)VC++ 如何隐藏控制台程序窗口

大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出.下面就介绍一下,如何隐藏win32 console application的console窗口 . 因为此种方法是通过设置编译器的链

cwq水域 的专栏 725

[VC++]控制台程序窗口隐藏 (好东西学习学习)

HWND   hWnd;     SetConsoleTITle("HEHE");     hWnd=::FindWindow(NULL,"HEHE");     ShowWindow(hWnd,SW_HIDE);  当创建一个控制台程序时,又不想看到其窗口可用如下代码解决: #ifdef NDEBUG #pragma comment( linker, "/subs

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1868
上一篇: 模态和非模态对话框
下一篇: Linux和Windows进程
likeping
博客等级 码龄25年 41粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值