나는 레지스트리 키가 UINT [] 알파 값이 : 이제C#을 취득합니다 바탕 화면 배경 색상과 가능한 값으로 변환 (? 16 진수)
res = new uint[]{ 0,0,0,0 };
res[0] = Convert.ToUInt32(a);
res[1] = Convert.ToUInt32(r);
res[2] = Convert.ToUInt32(g);
res[3] = Convert.ToUInt32(b);
내가 배경색을 변경하려면이 통근자의 FUNC를 사용하고 있습니다 :
01 내가 thusly 히 전화 23,516,[DllImport("user32.dll")]
public static extern bool SetSysColors(int cElements, int[] lpaElements, uint[] lpaRgbV);
:
int[] aiElements = { 1 };
SetSysColors(1, aiElements, res); // Problem here...
문제점이 페이지보고 후 PInvoke.net 가이 기능은 AA는 알파 RR가이다이 형식 [0xAARRGGBB] 의 색상을 받아들이는 것 같다이다 빨강 등 (16 진수). 나는 정확한 결과물을 얻기 위해 무수히 많은 다른 것들을 시도했지만, 제대로 할 수는없는 것 같습니다. 나는 바이트 (들)에 데이터를 변환하려고 노력했지만, 나는 그것을 잘못하고 있었기 때문에 아마도 작동하지 않을 수있다. 이것에 대한 통찰력은 많이 인정 될 것입니다. 나는 오히려 명명 된 색상을 사용하지 않을 것입니다. 왜냐하면이 시스템 색상 이름과 모든 항목 (IE Scrollbar_Color)을 사용하면 좀 더 엉망이됩니다. 유사한 문제를 가진 사람을위한 최종 작업 솔루션 :
Key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Colors", true);
tmp = (string)Key.GetValue("Background");
char[] spaceSeparator = new char[] { ' ' };
tmpt = tmp.Split(spaceSeparator, StringSplitOptions.None);
tmptINTS = Array.ConvertAll(tmpt, new Converter<string, int>(int.Parse));
a = 255;
r = tmptINTS[0];
g = tmptINTS[1];
b = tmptINTS[2];
byte[] res = new byte[]{ 0,0,0,0 };
int cnt = 0;
foreach (var value in tmptINTS)
{
byte[] byteArray = BitConverter.GetBytes(value);
res[cnt] = (Byte)value;
cnt++;
}
uint[] aColor = new uint[] { 0 };
Buffer.BlockCopy(res, 0, aColor, 0, 4);
aColor가 16 개보다 색상이
이편집 (내가 ... 내가) 더 케이스 (들 가지고 있지만, 간결성을 위하여 수있어) 이제 올바른 형식으로!
고마워요 ... 시도해 볼게요! –
소량의 문제로 인해이 접근 방식을 사용할 수 있습니다. 감사! 답변 허용. –