2017-12-14 3 views
0

나는 레지스트리 키가 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 개보다 색상이

편집 (내가 ... 내가) 더 케이스 (들 가지고 있지만, 간결성을 위하여 수있어) 이제 올바른 형식으로!

답변

1

여기에 두 가지 문제점이 있습니다. 먼저 32 비트 uint 초에 색 구성 요소를 저장합니다. 이것은 윈도우가 기대하는 형식이 아닙니다. 값이 0-255 인 byte 유형을 사용하려고합니다. 둘째, 하나의 색으로 색을 제공하고 싶습니다 (가져 오는 기능에 익숙하지 않지만). 이렇게하려면 네 바이트 값을 배열 byte[4]에 놓은 다음 Buffer 클래스의 'BlockCopy 메서드를 사용하여 uint[1]에 복사하면 찾고있는 형식으로 uint가 생성되고 이미 배열 유형에 포함되어 있어야합니다 pinvoke 통화.

편집 : 사용중인 PInvoke.net의 다른 버전의 기능에 링크하는 것이 중요합니다. Here은 현재 MSDN 설명서에서 사용하려고하는 함수입니다. COLORREF 구조 윈도우는 여전히 uint로 전달 될 것으로 예상되지만 형식은 0x00BBGGRR - 0xAARRGGBB가 아닙니다.

+0

고마워요 ... 시도해 볼게요! –

+0

소량의 문제로 인해이 접근 방식을 사용할 수 있습니다. 감사! 답변 허용. –

관련 문제