The Corsair User Forums  

Go Back   The Corsair User Forums > Corsair Product Discussion > iCUE Software

Notices

Reply
 
Thread Tools Search this Thread Rate Thread Display Modes
  #1  
Old 10-20-2018, 12:00 PM
BrakeZ BrakeZ is offline
Registered User
 
Join Date: Oct 2018
Posts: 1
POST ID # = 977208
BrakeZ Reputation: 10
Default Launch applitcation with profile.

Hi. I have some trouble figuring out how to launch an application when my profile goes live.

I have made it so my profiles switch when i open games. I also want to execute an .exe file and have it play a sound so i know, with the profile. However the 'Launch application' option wants me to bind it to a key and not my profile. Is there a way to bind it to a profile instead?

Thanks for any help in advance.
Reply With Quote
  #2  
Old 10-20-2018, 10:23 PM
hastegag hastegag is offline
Registered User
hastegag's PC Specs
 
Join Date: Dec 2016
Location: Northeast US
Posts: 904
POST ID # = 977271
hastegag Reputation: 20
Default

Icue without the sdk running only can play sounds and run an Exe on keypress unless I am missing something?? You can setup a single play through lighting effect on profile start.

If you really need it I can walk you through setting up the sdk to do something on profile change? It uses processor cycles as you need to poll for the color of a key and wrote some logic to do something when it changes.

An easier method may be what solarity wrote, a power shell script that polls for an xml file someplace in the cue folders which I think gets the active profile as well. The ps script can certainly run an exe and playing a sound can get done several ways.
Reply With Quote
  #3  
Old 10-22-2018, 12:37 PM
solarity solarity is offline
CORSAIR Beta Team
solarity's PC Specs
 
Join Date: Mar 2017
Location: Rochester, NY
Posts: 728
POST ID # = 977509
solarity Reputation: 33
Default

Quote:
Originally Posted by hastegag View Post
Icue without the sdk running only can play sounds and run an Exe on keypress unless I am missing something?? You can setup a single play through lighting effect on profile start.

If you really need it I can walk you through setting up the sdk to do something on profile change? It uses processor cycles as you need to poll for the color of a key and wrote some logic to do something when it changes.

An easier method may be what solarity wrote, a power shell script that polls for an xml file someplace in the cue folders which I think gets the active profile as well. The ps script can certainly run an exe and playing a sound can get done several ways.
The script I wrote didn't sync directly to iCUE it would watch for the same process to run that icue monitors for changing the profile. Then it would load up RGB Profile for RGB Fusion.
__________________
RGB 101 Video: General overview on RGB
Zotty's Corsair Guide: RGB FAQ and Sample Diagrams


Disclaimer: I am not an employee of Corsair all my opinions are my own.
Reply With Quote
  #4  
Old 10-22-2018, 08:57 PM
hastegag hastegag is offline
Registered User
hastegag's PC Specs
 
Join Date: Dec 2016
Location: Northeast US
Posts: 904
POST ID # = 977585
hastegag Reputation: 20
Default

Quote:
The script I wrote didn't sync directly to iCUE it would watch for the same process to run that icue monitors for changing the profile. Then it would load up RGB Profile for RGB Fusion.
Ahh, cool I think I understand it better now, it would effect your motherboards RGB headers by matching running processes. Cool beans! PS I see you are in Rottenchester - I grew up there, I'm a couple hundred miles from you, but next time I am invited to a lan i'll pm you!

I just tried to take a stab at helping this OP out by taking my highly specific approach and making it more abstract and dynamic allowing arguments to pass in and then poll for the active profile, but I realized that's ... more complex than just walking someone through coding their own logic to get it done.

here is a dumbed down version of the register callback example from the SDK which works to poll the active profile in icue but would require a single key someplace be a solid, static color:

Code:
// register_callback.cpp : Defines the entry point for the console application.
//
#ifdef __APPLE__
#include <CUESDK/CUESDK.h>
#else
#include <CUESDK.h>
#endif

#include <cstdio>
#include <iostream>
#include <fstream>
#include <string>
#include <chrono>
#include <thread>
#include <windows.h>
#include <unordered_map>
#include <WinBase.h>


extern int currentProfile;
int currentProfile = 999;

struct Context
{
	CorsairKeyId m_lastPressedKey;
};

const std::unordered_map<CorsairKeyId, std::string> keyIdStrings = {
	{CorsairKey_Invalid, "CorsairKey_Invalid"},
	{CorsairKeyKb_G1, "CorsairKeyKb_G1"},
	{CorsairKeyKb_G2, "CorsairKeyKb_G2"},
	{CorsairKeyKb_G3, "CorsairKeyKb_G3"},
	{CorsairKeyKb_G4, "CorsairKeyKb_G4"},
	{CorsairKeyKb_G5, "CorsairKeyKb_G5"},
	{CorsairKeyKb_G6, "CorsairKeyKb_G6"},
	{CorsairKeyKb_G7, "CorsairKeyKb_G7"},
	{CorsairKeyKb_G8, "CorsairKeyKb_G8"},
	{CorsairKeyKb_G9, "CorsairKeyKb_G9"},
	{CorsairKeyKb_G10, "CorsairKeyKb_G10"},
	{CorsairKeyKb_G11, "CorsairKeyKb_G11"},
	{CorsairKeyKb_G12, "CorsairKeyKb_G12"},
	{CorsairKeyKb_G13, "CorsairKeyKb_G13"},
	{CorsairKeyKb_G14, "CorsairKeyKb_G14"},
	{CorsairKeyKb_G15, "CorsairKeyKb_G15"},
	{CorsairKeyKb_G16, "CorsairKeyKb_G16"},
	{CorsairKeyKb_G17, "CorsairKeyKb_G17"},
	{CorsairKeyKb_G18, "CorsairKeyKb_G18"},

	{CorsairKeyMouse_M1, "CorsairKeyMouse_M1"},
	{CorsairKeyMouse_M2, "CorsairKeyMouse_M2"},
	{CorsairKeyMouse_M3, "CorsairKeyMouse_M3"},
	{CorsairKeyMouse_M4, "CorsairKeyMouse_M4"},
	{CorsairKeyMouse_M5, "CorsairKeyMouse_M5"},
	{CorsairKeyMouse_M6, "CorsairKeyMouse_M6"},
	{CorsairKeyMouse_M7, "CorsairKeyMouse_M7"},
	{CorsairKeyMouse_M8, "CorsairKeyMouse_M8"},
	{CorsairKeyMouse_M9, "CorsairKeyMouse_M9"},
	{CorsairKeyMouse_M10, "CorsairKeyMouse_M10"},
	{CorsairKeyMouse_M11, "CorsairKeyMouse_M11"},
	{CorsairKeyMouse_M12, "CorsairKeyMouse_M12"}
};

const std::unordered_map<CorsairKeyId, CorsairLedId> keyIdToLedId = {
	{CorsairKey_Invalid, CLI_Invalid},

	{CorsairKeyKb_G1, CLK_G1},
	{CorsairKeyKb_G2, CLK_G2},
	{CorsairKeyKb_G3, CLK_G3},
	{CorsairKeyKb_G4, CLK_G4},
	{CorsairKeyKb_G5, CLK_G5},
	{CorsairKeyKb_G6, CLK_G6},
	{CorsairKeyKb_G7, CLK_G7},
	{CorsairKeyKb_G8, CLK_G8},
	{CorsairKeyKb_G9, CLK_G9},
	{CorsairKeyKb_G10, CLK_G10},
	{CorsairKeyKb_G11, CLK_G11},
	{CorsairKeyKb_G12, CLK_G12},
	{CorsairKeyKb_G13, CLK_G13},
	{CorsairKeyKb_G14, CLK_G14},
	{CorsairKeyKb_G15, CLK_G15},
	{CorsairKeyKb_G16, CLK_G16},
	{CorsairKeyKb_G17, CLK_G17},
	{CorsairKeyKb_G18, CLK_G18},

	{CorsairKeyMouse_M1, CLM_1},
	{CorsairKeyMouse_M2, CLM_2},
	{CorsairKeyMouse_M3, CLM_3},
	{CorsairKeyMouse_M4, CLM_4},
	{CorsairKeyMouse_M5, CLM_5},
	{CorsairKeyMouse_M6, CLM_6},
	{CorsairKeyMouse_M7, CLK_A},
	{CorsairKeyMouse_M8, CLK_B},
	{CorsairKeyMouse_M9, CLK_C},
	{CorsairKeyMouse_M10, CLK_D},
	{CorsairKeyMouse_M11, CLK_E},
	{CorsairKeyMouse_M12, CLK_F}
};

const char* toString(CorsairError error) 
{
	switch (error) {
	case CE_Success :
		return "CE_Success";
	case CE_ServerNotFound:
		return "CE_ServerNotFound";
	case CE_NoControl:
		return "CE_NoControl";
	case CE_ProtocolHandshakeMissing:
		return "CE_ProtocolHandshakeMissing";
	case CE_IncompatibleProtocol:
		return "CE_IncompatibleProtocol";
	case CE_InvalidArguments:
		return "CE_InvalidArguments";
	default:
		return "unknown error";
	}
}

int profileGetter(CorsairLedColor ledColor) {
	if (ledColor.r == 20 && ledColor.b == 0)
	{
		currentProfile = 0;
	}
	else if (ledColor.r == 238 && ledColor.b == 255)
	{
		currentProfile = 1;
	}
	else if (ledColor.r == 155 && ledColor.g == 255 && ledColor.b == 0)
	{
		currentProfile = 2;
	}
	else if (ledColor.r == 43)
	{
		currentProfile = 3;
	}
	else if (ledColor.r == 98 && ledColor.g == 255)
	{
		currentProfile = 4;
	}
	else if (ledColor.b == 1)
	{
		currentProfile = 5;
	}
	else if (ledColor.g == 13 && ledColor.b == 60)
	{
		currentProfile = 6;
	}
	else if (ledColor.r == 53 && ledColor.b == 255)
	{
		currentProfile = 7;
	}
	else if (ledColor.r == 255 && ledColor.b == 165)
	{
		currentProfile = 8;
	}
	else if (ledColor.r == 255 && ledColor.g == 170 && ledColor.b == 0)
	{
		currentProfile = 9;
	}
	else if (ledColor.g == 255)
	{
		currentProfile = 10;
	}
	else
	{

	}
	return currentProfile;
}

void otherCallBack() {
	auto ledId = CLK_Q;
	CorsairLedColor ledColor = {ledId, 0, 0, 0};
	CorsairGetLedsColors(1, &ledColor);
	currentProfile = profileGetter(ledColor);
}
//(int argc, char** argv)
//that was the typical input for the function but i realized it is complicated depending on what users would need to do
int main()
{
	using namespace std::chrono_literals;
	currentProfile = 999;
	CorsairPerformProtocolHandshake();
	std::ofstream myfilea;
	myfilea.open("Profile.txt");
	myfilea << &currentProfile;
	myfilea.close();
	//the above allows you to poll it in autohotkey which does much magic if you like and prevents multiple harddrive writes
	if (const auto error = CorsairGetLastError()) {
		std::cout << "Handshake failed: " << toString(error) << "\nPress any key to quit." << std::endl;
		getchar();
		return -1;
	}
	//std::cout << "Working... Press \"q\" to close program...\n";
	//could do a q poll via getkeystate but op will have qs
	while (true) {
		std::this_thread::sleep_for(1s);
		//every one second check for the profile and then update the variable
		
		//int arg1 = std::stoi(argv[1]);
		//CorsairLedColor ledId = arg1;
		//even if we sort the enum, it gets complex since people would need to provide a lot of input accurately, give up

		//was going to pass in CorsairLedId ledId
		otherCallBack();
		std::cout << "Profile is: " << currentProfile << std::endl;
		//std::cout << "First Argument sent in " << argv[1] << " second argument sent in: " << argv[2] << std::endl << std::endl;
	}
	return 0;
}
Users would need to install SDK, modify their logic in the profilegetter to match the color on a key and then they can either perform external effects immediately inside the logic or just save the current profile to a variable in memory and read it elsewhere (what i do) and then test for it or do something when it changes.
Reply With Quote
  #5  
Old 10-30-2018, 06:04 AM
Comet ☄'s Avatar
Comet ☄ Comet ☄ is offline
Witch
Comet ☄'s PC Specs
 
Join Date: Feb 2016
Location: San Francisco Bay Area, California
Posts: 875
POST ID # = 978305
Comet ☄ Reputation: 10
Send a message via Yahoo to Comet ☄
Default

Quote:
Originally Posted by BrakeZ View Post
Hi. I have some trouble figuring out how to launch an application when my profile goes live.

I have made it so my profiles switch when i open games. I also want to execute an .exe file and have it play a sound so i know, with the profile. However the 'Launch application' option wants me to bind it to a key and not my profile. Is there a way to bind it to a profile instead?

Thanks for any help in advance.
Create a batch file that opens your game AND executes your secondary file.
Reply With Quote
  #6  
Old 10-30-2018, 07:54 PM
hastegag hastegag is offline
Registered User
hastegag's PC Specs
 
Join Date: Dec 2016
Location: Northeast US
Posts: 904
POST ID # = 978364
hastegag Reputation: 20
Default

That’s a great idea but op can’t run bat file in profile change as I understand it only once if they ran a game or application. What if they alt tabbed etc
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 08:22 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc.