mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	windows registration for device notif(thru hidden app) - windows doesnt need update now
This commit is contained in:
		
							parent
							
								
									118354ecf4
								
							
						
					
					
						commit
						87fff4626e
					
				
					 3 changed files with 40 additions and 73 deletions
				
			
		|  | @ -271,7 +271,7 @@ bool GUI_App::on_init_inner() | |||
|         this->obj_manipul()->update_if_dirty(); | ||||
| 
 | ||||
| 
 | ||||
| 		RemovableDriveManager::get_instance().update(wxGetLocalTime()); | ||||
| 		//RemovableDriveManager::get_instance().update(wxGetLocalTime());
 | ||||
| 
 | ||||
| 
 | ||||
|         // Preset updating & Configwizard are done after the above initializations,
 | ||||
|  | @ -301,6 +301,7 @@ bool GUI_App::on_init_inner() | |||
|                 preset_updater->slic3r_update_notify(); | ||||
|                 preset_updater->sync(preset_bundle); | ||||
|             }); | ||||
| 			RemovableDriveManager::get_instance().init(); | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,9 +8,9 @@ | |||
| #include <winioctl.h> | ||||
| #include <shlwapi.h> | ||||
| 
 | ||||
| //#include <Dbt.h>
 | ||||
| //GUID WceusbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72,
 | ||||
| //					  0x8a,0x6d,0xb5,0x4c,0x2b,0x4f,0xc8,0x35 };
 | ||||
| #include <Dbt.h> | ||||
| GUID WceusbshGUID = { 0x25dbce51, 0x6c8f, 0x4a72, | ||||
| 					  0x8a,0x6d,0xb5,0x4c,0x2b,0x4f,0xc8,0x35 }; | ||||
| 
 | ||||
| #else | ||||
| //linux includes
 | ||||
|  | @ -29,7 +29,7 @@ namespace GUI { | |||
| 
 | ||||
| 
 | ||||
| #if _WIN32 | ||||
| //INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 | ||||
| INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); | ||||
| void RemovableDriveManager::search_for_drives() | ||||
| { | ||||
| 	m_current_drives.clear(); | ||||
|  | @ -136,13 +136,8 @@ std::string RemovableDriveManager::get_drive_from_path(const std::string& path) | |||
| } | ||||
| void RemovableDriveManager::register_window() | ||||
| { | ||||
| 	/*
 | ||||
| 	std::cout << "Registering for device notification\n"; | ||||
| 	 | ||||
| 	 | ||||
| 
 | ||||
| 	WNDCLASSEX wndClass; | ||||
| 
 | ||||
| 	wndClass.cbSize = sizeof(WNDCLASSEX); | ||||
| 	wndClass.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; | ||||
| 	wndClass.hInstance = reinterpret_cast<HINSTANCE>(GetModuleHandle(0)); | ||||
|  | @ -155,34 +150,41 @@ void RemovableDriveManager::register_window() | |||
| 	wndClass.lpszClassName = L"PrusaSlicer_aux_class"; | ||||
| 	wndClass.lpszMenuName = NULL; | ||||
| 	wndClass.hIconSm = wndClass.hIcon; | ||||
| 
 | ||||
| 	HINSTANCE hInstanceExe = GetModuleHandle(NULL); | ||||
| 	if(!RegisterClassEx(&wndClass)) | ||||
| 	{ | ||||
| 		DWORD err = GetLastError(); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	HWND hWnd = CreateWindowEx( | ||||
| 		WS_EX_CLIENTEDGE | WS_EX_APPWINDOW, | ||||
| 		WS_EX_NOACTIVATE, | ||||
| 		L"PrusaSlicer_aux_class", | ||||
| 		L"PrusaSlicer_aux_wnd", | ||||
| 		WS_OVERLAPPEDWINDOW, // style
 | ||||
| 		WS_DISABLED, // style
 | ||||
| 		CW_USEDEFAULT, 0, | ||||
| 		640, 480, | ||||
| 		NULL, NULL, | ||||
| 		hInstanceExe, | ||||
| 		GetModuleHandle(NULL), | ||||
| 		NULL); | ||||
| */ | ||||
| 	if(hWnd == NULL) | ||||
| 	{ | ||||
| 		DWORD err = GetLastError(); | ||||
| 	} | ||||
| 	//ShowWindow(hWnd, SW_SHOWNORMAL);
 | ||||
| 	UpdateWindow(hWnd); | ||||
| } | ||||
| /*
 | ||||
| 
 | ||||
| INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) | ||||
| { | ||||
| 	LRESULT lRet = 1; | ||||
| 	static HDEVNOTIFY hDeviceNotify; | ||||
| 
 | ||||
| 	static HWND hEditWnd; | ||||
| 	static ULONGLONG msgCount = 0; | ||||
| 
 | ||||
| 	switch (message) | ||||
| 	{ | ||||
| 	case WM_CREATE: | ||||
| 
 | ||||
| 
 | ||||
| 		DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; | ||||
| 
 | ||||
| 		ZeroMemory(&NotificationFilter, sizeof(NotificationFilter)); | ||||
|  | @ -196,55 +198,13 @@ INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP | |||
| 			DEVICE_NOTIFY_WINDOW_HANDLE // type of recipient handle
 | ||||
| 		); | ||||
| 		break; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	case WM_DEVICECHANGE: | ||||
| 	{ | ||||
| 		std::cout << "WM_DEVICECHANGE\n"; | ||||
| 		/*
 | ||||
| 		// This is the actual message from the interface via Windows messaging.
 | ||||
| 		// This code includes some additional decoding for this particular device type
 | ||||
| 		// and some common validation checks.
 | ||||
| 		//
 | ||||
| 		// Note that not all devices utilize these optional parameters in the same
 | ||||
| 		// way. Refer to the extended information for your particular device type
 | ||||
| 		// specified by your GUID.
 | ||||
| 		//
 | ||||
| 		PDEV_BROADCAST_DEVICEINTERFACE b = (PDEV_BROADCAST_DEVICEINTERFACE)lParam; | ||||
| 		TCHAR strBuff[256]; | ||||
| 
 | ||||
| 		// Output some messages to the window.
 | ||||
| 		switch (wParam) | ||||
| 		if(wParam == DBT_DEVICEREMOVECOMPLETE) | ||||
| 		{ | ||||
| 		case DBT_DEVICEARRIVAL: | ||||
| 			msgCount++; | ||||
| 			StringCchPrintf( | ||||
| 				strBuff, 256, | ||||
| 				TEXT("Message %d: DBT_DEVICEARRIVAL\n"), msgCount); | ||||
| 			break; | ||||
| 		case DBT_DEVICEREMOVECOMPLETE: | ||||
| 			msgCount++; | ||||
| 			StringCchPrintf( | ||||
| 				strBuff, 256, | ||||
| 				TEXT("Message %d: DBT_DEVICEREMOVECOMPLETE\n"), msgCount); | ||||
| 			break; | ||||
| 		case DBT_DEVNODES_CHANGED: | ||||
| 			msgCount++; | ||||
| 			StringCchPrintf( | ||||
| 				strBuff, 256, | ||||
| 				TEXT("Message %d: DBT_DEVNODES_CHANGED\n"), msgCount); | ||||
| 			break; | ||||
| 		default: | ||||
| 			msgCount++; | ||||
| 			StringCchPrintf( | ||||
| 				strBuff, 256, | ||||
| 				TEXT("Message %d: WM_DEVICECHANGE message received, value %d unhandled.\n"), | ||||
| 				msgCount, wParam); | ||||
| 			break; | ||||
| 			std::cout << "WM_DEVICECHANGE\n"; | ||||
| 			RemovableDriveManager::get_instance().on_drive_removed_callback(); | ||||
| 		} | ||||
| 		OutputMessage(hEditWnd, wParam, (LPARAM)strBuff); | ||||
| 		/ | ||||
| 	} | ||||
| 	break; | ||||
| 	default: | ||||
|  | @ -254,7 +214,7 @@ INT_PTR WINAPI WinProcCallback(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP | |||
| 	} | ||||
| 	return lRet; | ||||
| } | ||||
| */ | ||||
| 
 | ||||
| #else | ||||
| void RemovableDriveManager::search_for_drives() | ||||
| { | ||||
|  | @ -420,15 +380,16 @@ std::string RemovableDriveManager::get_drive_from_path(const std::string& path) | |||
| 	return ""; | ||||
| } | ||||
| #endif | ||||
| void RemovableDriveManager::init() | ||||
| { | ||||
| 	add_callback([](void) { RemovableDriveManager::get_instance().print(); }); | ||||
| #if _WIN32 | ||||
| 	register_window(); | ||||
| #endif | ||||
| 	update(); | ||||
| } | ||||
| bool RemovableDriveManager::update(const long time) | ||||
| { | ||||
| 	if(m_last_update == 0) | ||||
| 	{ | ||||
| 		add_callback([](void) { RemovableDriveManager::get_instance().print(); }); | ||||
| #if _WIN32 | ||||
| 		//register_window();
 | ||||
| #endif | ||||
| 	} | ||||
| 	if(time != 0) //time = 0 is forced update
 | ||||
| 	{ | ||||
| 		long diff = m_last_update - time; | ||||
|  | @ -442,7 +403,6 @@ bool RemovableDriveManager::update(const long time) | |||
| 	} | ||||
| 	search_for_drives(); | ||||
| 	check_and_notify(); | ||||
| 	//eject_drive(m_current_drives.back().path);
 | ||||
| 	return !m_current_drives.empty(); | ||||
| } | ||||
| 
 | ||||
|  | @ -523,6 +483,10 @@ void RemovableDriveManager::reset_last_save_path() | |||
| { | ||||
| 	m_last_save_path = ""; | ||||
| } | ||||
| void RemovableDriveManager::on_drive_removed_callback() | ||||
| { | ||||
| 	update(); | ||||
| } | ||||
| void RemovableDriveManager::print() | ||||
| { | ||||
| 	//std::cout << "Removed Device: "<<(int)is_last_drive_removed()<<"\n";
 | ||||
|  |  | |||
|  | @ -24,6 +24,7 @@ public: | |||
| 	void operator=(RemovableDriveManager const&) = delete; | ||||
| 	 | ||||
| 	//update() searches for removable devices, returns false if empty.
 | ||||
| 	void init(); | ||||
| 	bool update(const long time = 0);  //time = 0 is forced update, time expects wxGetLocalTime()
 | ||||
| 	bool is_drive_mounted(const std::string &path); | ||||
| 	void eject_drive(const std::string &path); | ||||
|  | @ -36,6 +37,7 @@ public: | |||
| 	bool is_last_drive_removed(); //if we dont need info about this drive, call reset_last_save_path();
 | ||||
| 	bool is_last_drive_removed_with_update(const long time = 0); // param as update()
 | ||||
| 	void reset_last_save_path(); | ||||
| 	void on_drive_removed_callback(); | ||||
| 	void print(); | ||||
| private: | ||||
| 	RemovableDriveManager():m_drives_count(0),m_last_update(0),m_last_save_path(""){} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 David Kocik
						David Kocik