171 CATCH_BAD_ALLOC_RET(NULL); 172 } 173 174 JNIEXPORT jobjectArray JNICALL 175 Java_sun_print_PrintServiceLookupProvider_getAllPrinterNames(JNIEnv *env, 176 jobject peer) 177 { 178 return getPrinterNames(env, PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS); 179 } 180 181 JNIEXPORT jobjectArray JNICALL 182 Java_sun_print_PrintServiceLookupProvider_getRemotePrintersNames(JNIEnv *env, 183 jobject peer) 184 { 185 return getPrinterNames(env, PRINTER_ENUM_CONNECTIONS); 186 } 187 188 189 JNIEXPORT jlong JNICALL 190 Java_sun_print_PrintServiceLookupProvider_notifyFirstPrinterChange(JNIEnv *env, 191 jobject peer, 192 jstring printer) { 193 HANDLE hPrinter; 194 195 LPTSTR printerName = NULL; 196 if (printer != NULL) { 197 printerName = (LPTSTR)JNU_GetStringPlatformChars(env, 198 printer, 199 NULL); 200 JNU_ReleaseStringPlatformChars(env, printer, printerName); 201 } 202 203 // printerName - "Win NT/2K/XP: If NULL, it indicates the local printer 204 // server" - MSDN. Win9x : OpenPrinter returns 0. 205 BOOL ret = OpenPrinter(printerName, &hPrinter, NULL); 206 if (!ret) { 207 return (jlong)-1; 208 } 209 210 // PRINTER_CHANGE_PRINTER = PRINTER_CHANGE_ADD_PRINTER | 211 // PRINTER_CHANGE_SET_PRINTER | 212 // PRINTER_CHANGE_DELETE_PRINTER | 213 // PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 214 HANDLE chgObj = FindFirstPrinterChangeNotification(hPrinter, 215 PRINTER_CHANGE_PRINTER, 216 0, 217 NULL); 218 return (chgObj == INVALID_HANDLE_VALUE) ? (jlong)-1 : (jlong)chgObj; 219 } 220 221 222 223 JNIEXPORT void JNICALL 224 Java_sun_print_PrintServiceLookupProvider_notifyClosePrinterChange(JNIEnv *env, | 171 CATCH_BAD_ALLOC_RET(NULL); 172 } 173 174 JNIEXPORT jobjectArray JNICALL 175 Java_sun_print_PrintServiceLookupProvider_getAllPrinterNames(JNIEnv *env, 176 jobject peer) 177 { 178 return getPrinterNames(env, PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS); 179 } 180 181 JNIEXPORT jobjectArray JNICALL 182 Java_sun_print_PrintServiceLookupProvider_getRemotePrintersNames(JNIEnv *env, 183 jobject peer) 184 { 185 return getPrinterNames(env, PRINTER_ENUM_CONNECTIONS); 186 } 187 188 189 JNIEXPORT jlong JNICALL 190 Java_sun_print_PrintServiceLookupProvider_notifyFirstPrinterChange(JNIEnv *env, 191 jobject peer) { 192 HANDLE hPrinter; 193 LPTSTR printerName = NULL; // NULL indicates the local printer server 194 BOOL ret = OpenPrinter(printerName, &hPrinter, NULL); 195 if (!ret) { 196 return (jlong)-1; 197 } 198 199 // PRINTER_CHANGE_PRINTER = PRINTER_CHANGE_ADD_PRINTER | 200 // PRINTER_CHANGE_SET_PRINTER | 201 // PRINTER_CHANGE_DELETE_PRINTER | 202 // PRINTER_CHANGE_FAILED_CONNECTION_PRINTER 203 HANDLE chgObj = FindFirstPrinterChangeNotification(hPrinter, 204 PRINTER_CHANGE_PRINTER, 205 0, 206 NULL); 207 return (chgObj == INVALID_HANDLE_VALUE) ? (jlong)-1 : (jlong)chgObj; 208 } 209 210 211 212 JNIEXPORT void JNICALL 213 Java_sun_print_PrintServiceLookupProvider_notifyClosePrinterChange(JNIEnv *env, |